FC Coding is
One step from 1st Principles to Solution!

Home



Oil Refinery Production Model Code
to optimize a Company's entire Distillation units
in one run.

Goal for this page: show how to use a Calculus Language 'Find' statement to tweak parameters in order to achieve production objective(s) that are stated in a 'Find' statement.


On this page, we'll attempt to guide you through the various model routines in order to create a 'picture' for you to understand what's going on.

After setup and other models are called that initialize things, then a Find statement is executed. A Find statement loops through ones code many many times in order to find optimal parameter values. See the arrows pointing to new code additions.

global all problem OilProduction nRefineries = 22: nProducts = 33 Key point call setup ! initial values call history ! extrapolate 4 today’s usage ! find product percentages for all Refineries in order to maximize profit. find supplyEst; in refineries; by jupiter; Key point matching supplyErr; to maximize profit End model refineries ooo

Next, are the 'processing' model changes.

model Processing ! All distillation units @ All refinery do i = 1, nRefineries Key point ! assume distillation requires solving a PDE or two. ! below is the bases for solving a PDE. t = 0: tPrt = tPrint do j = 1, nDistillUnits(i) Key point Initiate ISIS for PDEquations ooo do while (t .lt. tFinal) ooo

Total model is summed up next. The solver will vary your (independent) parameters, see 'supplyEst' in model, in order to meet company's objectives.

global all problem OilProduction nRefineries = 22: nProducts = 33 Key point dynamic hi, low, totCrudeIn, ooo call setup ! initial values call history ! extrapolate 4 today’s usage ! find product percentages for all Refineries in order to maximize profit. find supplyEst; in refineries; by jupiter; Key point matching supplyErr; to maximize profit End model refineries pollution = 0: profit = 0: cost = 0: supplyErr = 0 do i = 1, nRefineries do k = 1, nProducts supplyQty(k) = supplyEst(i, k) end do crudeUsed = 0: crudeErr = 0 ! finds qty production @ each refinery to minimize overall pollution ! to restrict 'supplyQty(k)' to equal 'supplyEst(k)' find supplyQty; in processing; by Jove; with upper hi; and lower low; matching crudeErr; to minimize pollution do k = 1, nProducts supplyErr = supplyErr + (supplyQty(k) - supplyEst(i, k))**2 end do end do ! find best routes to deliver products ooo find routes in distribution ooo to minimize distPollution profit = ??? ! calculate / measure it! cost = ??? ! ditto profit = profit - cost end model Processing ! All distillation units do i = 1, nRefineries Key point ! assume distillation requires solving a PDE or two. ! below is the bases for solving a PDE. do j = 1, nDistillUnit(i) Key point t = 0: tPrt = tPrint Initiate ISIS for PDEquations ooo do while (t .lt. tFinal) Integrate PDEquations by ISIS if( t .ge. tPrt) print 79, t, (U(ii),ii = 1,ip) tPrt = tPrt + tPrint end do end do crudeErr = crudeErr+(totCrudeIn(i, j)– crudeUsed)**2 end do 79 format( 1x,f8.4,20(g14.5, 1x)) end model PDEquations if( j .eq. 1) then pde_1 = pde equations with parameters ! assume # 3, 7, & 8 products are created qtyProd(3) = qtyProd(3) + ??? qtyProd(7) = qtyProd(7) + ??? qtyProd(8) = qtyProd(8) + ??? elseif( j .eq. 2) then pde_2 = pde equations with parameters ! assume # 2 & 8 products are created qtyProd(2) = qtyProd(2) + ??? qtyProd(8) = qtyProd(8) + ??? ooo end if crudeUsed = crudeUsed + ??? pollution = pollution + ??? cost = cost + mfgCost + distCost + ??? profit = profit + ??? end model distribution distPollution = 0 ! your (algebraic?) equations that model your distribution go here. ooo end procedure Setup allot supplyEst(nRefineries, nProducts), hi(nProducts), low(nProducts), ooo ! today’s available Crude Oil at different refineries totCrudeIn = data( …’ available crude INPUT levels ' at each Refinery goes here’ …) totHi = data( … storage limits for various products goes here …) totLow = data( … target amounts less inventory goes here …) nDistillUnit = data( … # of distillation units @ each refinery goes here …) End procedure history ! here, use past history to estimate today’s oil needs salesHistory( 1,1) >= data( …’ amount of crude oil to be targeted for ' today at the 1st Refinery goes here’ salesHistory( 2,1) >= data( …’ 2nd Refinery’ …) ooo salesHistory( nRefineries,1) >= data( …’ nth Refinery’ …) end

This example shows nesting of find statements that will help maximize productivity. Getting agreement on what a company's objective is or should take some time. It is hoped that this example will aide you on solving your problem with Calculus programming. Solve not just one equation but your entire problem/project in one program.

Maintenance Model: may be an ongoing model to build. For example, how often do the light bulbs need changing? How about the pipes carrying oil? Those with experience have said oil pipes in refineries need repair every 3 months to 6 months. 3 months, what a problem! Is that to say every 89 days and 4.5678 hours? When to schedule a repair? Oh, this could be a huge problem for a computer model.

The next article will show a Buy, Sell, or Hold model. This model can be executed every day, month, or when a CEO wants to see their options. It can be very helpful, but practice is key to reading the output and understanding what it truly says.



< < Back

Next > >


Problem-Solving Applications include:

CurvFit: a curve fitting program with Lorentzian, Sine, Exponential and Power series are available models to match your data.

Match-n-Freq: a Matched Filter program used to filter signals and slim pulses.

Industry Problem-Solving Descriptions include:

Business Strategies & War Gaming: Buy, Sell, Hold options may be tested for an entire company, individual plant(s), or whole product lines. Imagine an increase in control settings from a 1 or 2 digits (i.e., a guess value) to an 8+ digit accuracy resulting from a Calculus programming calculation!

Pulse Slimming to minimize InterSymbol Interference: via Arbitrary Equalization with Simple LC Structures to reduce errors.

Voice Coil Motor: basically an electromagnetic transducer in which a coil placed in a magnetic pole gap experiences a force proportional to the current passing through the coil.

Electrical Filter Design: find the transfer function's poles & zeros; H(s) = Yout(s) / Yin(s).

Digitized Signal from Magnetic Recording: Magnetic recording of transitions written onto a computer disc drive may produce an isolated pulse as shown.

AC Motor Design: a simulation program for A.C. motor design that was reapplied as a constrained optimization problem with 12 unknown parameters and 7 constraints.

PharmacoKinetics: an open-two- compartment model with first order absorption into elimination from central compartment is presented here.